package technique.寻找重复数;

public class Solution {
    public int findDuplicate(int[] nums) {
        /**
         * 数组内大小[1 , nums.length -1 ] 可以考虑将数组值作下标
         * 即 nums[nums[i]] = 0 , 当在没有执行nums[nums[i]] = 0 前就已经为 0 了，那么说明该元素重复了
         * 但是 nums[nums[i]] = 0 会将没扫描的值覆盖 ， 所以需要把值交换 ，完成了交换了下标不变 ，
         */
        for (int i = 0; i < nums.length; ) {
            if (nums[nums[i]] == 0) {
                return nums[i];
            } else {
                int temp = nums[nums[i]];
                nums[nums[i]] = 0 ;
                nums[i] = temp;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.findDuplicate(new int[]{1, 3, 4, 2, 2}));
    }
}
